package com.example.pei.ithinklearnt.utils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
import android.text.TextUtils;
import android.util.DisplayMetrics;

import com.example.pei.ithinklearnt.AppApplication;
import com.example.pei.ithinklearnt.bean.AlumniCircle;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import static android.content.Context.MODE_PRIVATE;


public class MyUtils {

    private static Boolean flag=true;     //确保AppRunTime程序只会增加一次运行次数

    // 判断是否是第一次启动程序 利用 SharedPreferences 将数据保存在本地
    public static int AppRunTime() {

        SharedPreferences sharedPreferences = AppApplication.getContext().getSharedPreferences("share", MODE_PRIVATE);
        int RunTime = sharedPreferences.getInt("RunTime", 1);   //如果没找到这条记录，则默认为1，意味着是第一次运行程序
        if(flag) {
            SharedPreferences.Editor editor = sharedPreferences.edit();
            //保存数据
            editor.putInt("RunTime", RunTime + 1 < 10000 ? RunTime + 1 : 10000);    //将RunTime+1存入，最大为10000
            //提交当前数据 （第四步）
            editor.commit();
            flag=false;
        }
        return RunTime;

    }
    //判断字符串是否全部都是空格，是则范围true
    public static boolean isAllSpace(String s) {
        if(s==null){
            return true;
        }
        char[] arrays = s.toCharArray();
        int num=0;
        for (int i=0;i<s.length();i++){
            if(arrays[i]==' '){
                num++;
            }
        }
        return num==s.length();
    }

    //获取当前手机屏幕密度
    public static int getDensity(Activity activity){
        DisplayMetrics dm = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
        return (int)(dm.density);
    }


    //输入生日，返回年龄,生日格式必须为 1996-12-14  这样
    public static int getAge(String birthDay){
        if(birthDay==null||"".equals(birthDay))
            return 120;
        Calendar calendar = Calendar.getInstance();
        int age=0;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = sdf.parse(birthDay);
            age= calendar.get(Calendar.YEAR)-date.getYear()-1900-1;//减一装个嫩吧 哈哈哈
        } catch (ParseException ee) {
            ee.printStackTrace();
        }
        return age;
    }




    //判断网络连接是否可用
    public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivityManager == null) {
        } else {
            NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
            if (networkInfo != null&&networkInfo.length>0) {
                for (int i = 0; i < networkInfo.length; i++) {
                    if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    //判断WiFi是否打开
    public static boolean isWiFi(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
            return true;
        }
        return false;
    }

    //判断移动数据是否打开
    public static boolean isMobile(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
            return true;
        }
        return false;
    }

    // 根据时间，选择显示合适的内容
    public static String getSendTime(String fullTime){
        String s=null;
        Calendar c = Calendar.getInstance();
        int currentYear = c.get(Calendar.YEAR);
        int currentmonth = c.get(Calendar.MONTH);
        int currentday = c.get(Calendar.DATE);
        Date fulldate;
        @SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            fulldate = sdf.parse(fullTime);
            if(currentYear!=fulldate.getYear()+1900){
                //不是今年发的技能，显示全时间
                s=(fulldate.getYear()+1900)+"年"+(fulldate.getMonth()+1)+"月"+fulldate.getDate()+"日"+fulldate.getHours()+"时";
            }else if(currentmonth!=fulldate.getMonth()){
                //是今年 但不是这个月发的
                s=fulldate.getMonth()+"月"+fulldate.getDate()+"日"+fulldate.getHours()+":"+((fulldate.getMinutes()<10)?("0"+fulldate.getMinutes()):fulldate.getMinutes());
            }else if(currentday-fulldate.getDate()==0){
                //是今年是这个月差一天
                s=fulldate.getHours()+":"+((fulldate.getMinutes()<10)?("0"+fulldate.getMinutes()):fulldate.getMinutes());
            } else if(currentday-fulldate.getDate()==1){
                //是今年是这个月差一天
                s="昨天"+fulldate.getHours()+":"+((fulldate.getMinutes()<10)?("0"+fulldate.getMinutes()):fulldate.getMinutes());
            }else if(currentday-fulldate.getDate()==2){
                //是今年是这个月差一天
                s="前天"+fulldate.getHours()+":"+((fulldate.getMinutes()<10)?("0"+fulldate.getMinutes()):fulldate.getMinutes());
            }else {
                s=(fulldate.getMonth()+1)+"月"+fulldate.getDate()+"日"+fulldate.getHours()+":"+((fulldate.getMinutes()<10)?("0"+fulldate.getMinutes()):fulldate.getMinutes());
            }
        } catch (ParseException ee) {
            ee.printStackTrace();
        }

        return s;
    }

    //检查sd卡是否可用
    public static boolean checkSdCard() {
        if (android.os.Environment.getExternalStorageState().equals(
                android.os.Environment.MEDIA_MOUNTED))
            return true;
        else
            return false;
    }

    /**
     * 正则：手机号（精确）
     * 移动：134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、178、182、183、184、187、188
     * 联通：130、131、132、145、155、156、175、176、185、186
     * 电信：133、153、173、177、180、181、189
     * 全球星：1349
     * 虚拟运营商：170
     */
    public static boolean isMobileNO(String num) {

        String telRegex = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|(147))\\d{8}$";
        if (TextUtils.isEmpty(num)|| !num.matches(telRegex)){
            return false;         //不是手机号
        }else{
            return true;          //是手机号
        }
    }

    //6-12位，非空格
    public static boolean checkPassword(String password){
        String passRegex="\\S{6,12}";
        if (TextUtils.isEmpty(password)|| !password.matches(passRegex)){
            return false;         //不是合法密码
        }else{
            return true;          //是合法密码
        }

    }


    /**
     * 图片缩放比例
     */
    private static final float BITMAP_SCALE = 0.4f;
    /**
     * 最大模糊度(在0.0到25.0之间)
     */
    private static final float BLUR_RADIUS = 25f;

    /**
     * 模糊图片的具体方法
     *
     * @param context   上下文对象
     * @param image     需要模糊的图片
     * @return          模糊处理后的图片
     */
    public static Bitmap blurImage(Context context, Bitmap image) {
        // 计算图片缩小后的长宽
        int width = Math.round(image.getWidth() * BITMAP_SCALE);
        int height = Math.round(image.getHeight() * BITMAP_SCALE);

        // 将缩小后的图片做为预渲染的图片。
        Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false);
        // 创建一张渲染后的输出图片。
        Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);

        // 创建RenderScript内核对象
        RenderScript rs = RenderScript.create(context);
        // 创建一个模糊效果的RenderScript的工具对象
        ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));

        // 由于RenderScript并没有使用VM来分配内存,所以需要使用Allocation类来创建和分配内存空间。
        // 创建Allocation对象的时候其实内存是空的,需要使用copyTo()将数据填充进去。
        Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
        Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);

        // 设置渲染的模糊程度, 25f是最大模糊度
        blurScript.setRadius(BLUR_RADIUS);
        // 设置blurScript对象的输入内存
        blurScript.setInput(tmpIn);
        // 将输出数据保存到输出内存中
        blurScript.forEach(tmpOut);

        // 将数据填充到Allocation中
        tmpOut.copyTo(outputBitmap);

        return outputBitmap;
    }

}
